# 必需参数
def printme(str):
    "打印任何传入的字符串"
    print(str)
    return
printme("xxx")# 调用 printme 函数，不加参数会报错

# 默认参数 (默认参数必须在形参列表的最后!!!)
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return

printinfo("damu")


# 关键字参数
def printnum(a,b=2,c=3):
    "打印任何传入的字符串"
    print(a,b,c)
printnum(4,c=8)

# 不定长参数
def test(*args): # * 组包(元组)
    print(args,type(args))
    for i in args:
        print(i)

test(*['a','b','c']) # 拆包(列表 元组 字符串 range对象)
test(*(1,2,3))
test(*range(11))
test(*"ahjdakshdkj")
# test(1,2,3,4,5,6,7,8)

# 强制位置参数
# 使用 / 标记来指定参数仅能使用位置传参。
# 使用 * 标记来指定参数仅能使用关键字传参。
# 在 / 和 * 之间的参数（如果有的话）可以通过位置或关键字来传递。


# / 之前的参数 必须使用位置来传
# * 之后的参数 必须使用关键字来传
# / 和 * 之间的 两种方式都可以
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

f(1,2, 3,d = 4,e = 5,f = 6)














